<?php

/*
 * Fresns Control Panel (Standalone)
 * Copyright (C) 2021-Present 刘鑫
 * Released under the MIT License.
 */

namespace App\Plugins\FcpApi\TweetAdmin;

use App\Base\Config\BaseConfig;
use App\Base\Models\BaseAdminModel;
use App\Helpers\StrHelper;
use Illuminate\Support\Facades\Schema;

class FsModel extends BaseAdminModel
{
    protected $table = 'users';

    // 钩子函数: 处理模型需要特殊初始化的参数
    public function hookModelInit()
    {
        parent::hookModelInit();
        if (Schema::hasColumn('users', 'user_type')) {
            // user type 固定为1，所以可以直接赋值
            request()->offsetSet('user_type', BaseConfig::USER_TYPE_ADMIN);
        }
    }

    // 新增的搜索条件
    public function getAddedSearchableFields()
    {
        return FsConfig::ADDED_SEARCHABLE_FIELDS;
    }

    // 前台表单-数据库表字段映射
    public function formFieldsMap()
    {
        return FsConfig::FORM_FIELDS_MAP;
    }

    public function initOrderByFields()
    {
        if (Schema::hasColumn('users', 'rank_num')) {
            $orderByFields = [
                'rank_num' => 'ASC',
                'id' => 'DESC',
                // 'updated_at'    => 'DESC',
            ];
        } else {
            $orderByFields = [
                'id' => 'DESC',
                // 'updated_at'    => 'DESC',
            ];
        }

        return $orderByFields;
    }

    // 创建
    public function store($input)
    {
        $input['user_type'] = BaseConfig::USER_TYPE_ADMIN;
        $input['password'] = StrHelper::createPassword($input['password']);
        $input['api_token'] = StrHelper::createToken();

        // 昵称默认为 login_name
        $input['nickname'] = $input['nickname'] ?? $input['login_name'];

        return parent::store($input);
    }

    // 更新密码
    public function updatePassword($id, $newPassword)
    {
        $input['password'] = StrHelper::createPassword($newPassword);

        return parent::updateItem($id, $input);
    }

    // 是否可删除
    // id=1的管理员不可删除
    public function canDelete($idArr)
    {
        if (in_array(BaseConfig::DEFAULT_ADMIN_ID, $idArr)) {
            return false;
        }

        return true;
    }
}
